/**
 * 兼容箭头函数的防抖封装
 * @param {Function} fn - 需要防抖的函数（支持普通函数和箭头函数）
 * @param {number} delay - 延迟时间（毫秒，默认500ms）
 * @param {boolean} immediate - 是否立即执行（默认false）
 * @returns {Function} - 返回防抖处理后的函数（带cancel方法）
 */
export const debounce = (fn: Function, delay: number = 500, immediate: boolean = false): Function => {
    let timer: number | any = null

    const debounced = (...args: any[]) => {
        // 清除已有定时器
        if (timer) {
            clearTimeout(timer)
            timer = null
        }

        // 立即执行模式（首次触发时立即执行）
        if (immediate && !timer) {
            fn(...args) // 箭头函数无需处理this
            immediate = false
        }

        // 设置新的定时器
        timer = setTimeout(() => {
            fn(...args) // 箭头函数无需处理this
            timer = null
        }, delay)
    }

    // 添加取消方法
    debounced.cancel = () => {
        if (timer) {
            clearTimeout(timer)
            timer = null
        }
    }

    return debounced
}